package com.lzb.browser.utils;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Base64;

import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.List;

public class IconUtils {

    /**
     * 将Bitmap转换为Base64字符串
     */
    public static String bitmapToBase64(Bitmap bitmap) {
        if (bitmap == null) {
            return null;
        }
        
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        // 压缩为PNG格式，质量100%
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
        byte[] byteArray = byteArrayOutputStream.toByteArray();
        
        // 转换为Base64字符串
        return Base64.encodeToString(byteArray, Base64.DEFAULT);
    }

    /**
     * 将Base64字符串转换为Bitmap
     */
    public static Bitmap base64ToBitmap(String base64String) {
        if (base64String == null || base64String.isEmpty()) {
            return null;
        }
        
        try {
            byte[] decodedBytes = Base64.decode(base64String, Base64.DEFAULT);
            return BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 压缩Bitmap到指定大小
     */
    public static Bitmap compressBitmap(Bitmap bitmap, int maxWidth, int maxHeight) {
        if (bitmap == null) {
            return null;
        }
        
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        
        // 计算缩放比例
        float scaleWidth = ((float) maxWidth) / width;
        float scaleHeight = ((float) maxHeight) / height;
        float scale = Math.min(scaleWidth, scaleHeight);
        
        // 创建缩放后的Bitmap
        return Bitmap.createScaledBitmap(bitmap, (int) (width * scale), (int) (height * scale), true);
    }

    /**
     * 获取网站默认的favicon URL
     * 从域名开始拼接，去掉多余的路径参数和查询参数
     */
    public static String getDefaultFaviconUrl(String websiteUrl) {
        if (websiteUrl == null || websiteUrl.isEmpty()) {
            return null;
        }
        
        try {
            // 确保URL有协议前缀
            if (!websiteUrl.startsWith("http://") && !websiteUrl.startsWith("https://")) {
                websiteUrl = "https://" + websiteUrl;
            }
            
            // 提取域名部分（去掉路径、查询参数等）
            java.net.URL url = new java.net.URL(websiteUrl);
            String protocol = url.getProtocol();
            String host = url.getHost();
            
            // 构建基础URL（协议+域名）
            String baseUrl = protocol + "://" + host;
            
            // 确保以/结尾
            if (!baseUrl.endsWith("/")) {
                baseUrl += "/";
            }
            
            // 返回标准的favicon路径
            return baseUrl + "favicon.ico";
            
        } catch (Exception e) {
            e.printStackTrace();
            // 如果解析失败，尝试手动清理URL
            return cleanUrlManually(websiteUrl);
        }
    }
    
    /**
     * 手动清理URL，去掉路径和查询参数
     */
    private static String cleanUrlManually(String websiteUrl) {
        if (websiteUrl == null || websiteUrl.isEmpty()) {
            return null;
        }
        
        // 确保有协议前缀
        if (!websiteUrl.startsWith("http://") && !websiteUrl.startsWith("https://")) {
            websiteUrl = "https://" + websiteUrl;
        }
        
        // 找到第一个/（协议后面的）
        int protocolEnd = websiteUrl.indexOf("://");
        if (protocolEnd != -1) {
            String protocol = websiteUrl.substring(0, protocolEnd + 3); // 包含://
            String remaining = websiteUrl.substring(protocolEnd + 3);
            
            // 找到第一个/或?，只保留域名部分
            int pathStart = remaining.indexOf('/');
            int queryStart = remaining.indexOf('?');
            
            int endIndex = remaining.length();
            if (pathStart != -1) {
                endIndex = Math.min(endIndex, pathStart);
            }
            if (queryStart != -1) {
                endIndex = Math.min(endIndex, queryStart);
            }
            
            String cleanDomain = remaining.substring(0, endIndex);
            String baseUrl = protocol + cleanDomain;
            
            if (!baseUrl.endsWith("/")) {
                baseUrl += "/";
            }
            
            return baseUrl + "favicon.ico";
        }
        
        // 如果无法解析，返回基本格式
        if (!websiteUrl.endsWith("/")) {
            websiteUrl += "/";
        }
        return websiteUrl + "favicon.ico";
    }
    
    /**
     * 获取网站可能的多个favicon路径
     * 按优先级排序，清理URL中的路径和查询参数
     */
    public static List<String> getPossibleFaviconUrls(String websiteUrl) {
        List<String> iconUrls = new ArrayList<>();
        
        if (websiteUrl == null || websiteUrl.isEmpty()) {
            return iconUrls;
        }
        
        String baseUrl = null;
        
        try {
            // 确保URL有协议前缀
            if (!websiteUrl.startsWith("http://") && !websiteUrl.startsWith("https://")) {
                websiteUrl = "https://" + websiteUrl;
            }
            
            // 提取域名部分（去掉路径、查询参数等）
            java.net.URL url = new java.net.URL(websiteUrl);
            String protocol = url.getProtocol();
            String host = url.getHost();
            
            // 构建基础URL（协议+域名）
            baseUrl = protocol + "://" + host;
            
            // 确保以/结尾
            if (!baseUrl.endsWith("/")) {
                baseUrl += "/";
            }
            
        } catch (Exception e) {
            e.printStackTrace();
            // 如果解析失败，使用手动清理
            baseUrl = extractCleanDomain(websiteUrl);
        }
        
        if (baseUrl != null) {
            // 按优先级添加可能的图标路径
            iconUrls.add(baseUrl + "favicon.ico");                    // 标准favicon
            iconUrls.add(baseUrl + "favicon.png");                    // PNG格式favicon
            iconUrls.add(baseUrl + "apple-touch-icon.png");         // Apple触摸图标
            iconUrls.add(baseUrl + "apple-touch-icon-precomposed.png"); // Apple预合成图标
            iconUrls.add(baseUrl + "site.webmanifest");             // Web应用清单（可能包含图标信息）
        }
        
        return iconUrls;
    }
    
    /**
     * 提取干净的域名部分
     */
    private static String extractCleanDomain(String websiteUrl) {
        if (websiteUrl == null || websiteUrl.isEmpty()) {
            return null;
        }
        
        try {
            // 确保有协议前缀
            if (!websiteUrl.startsWith("http://") && !websiteUrl.startsWith("https://")) {
                websiteUrl = "https://" + websiteUrl;
            }
            
            // 找到第一个/（协议后面的）
            int protocolEnd = websiteUrl.indexOf("://");
            if (protocolEnd != -1) {
                String protocol = websiteUrl.substring(0, protocolEnd + 3); // 包含://
                String remaining = websiteUrl.substring(protocolEnd + 3);
                
                // 找到第一个/或?，只保留域名部分
                int pathStart = remaining.indexOf('/');
                int queryStart = remaining.indexOf('?');
                
                int endIndex = remaining.length();
                if (pathStart != -1) {
                    endIndex = Math.min(endIndex, pathStart);
                }
                if (queryStart != -1) {
                    endIndex = Math.min(endIndex, queryStart);
                }
                
                String cleanDomain = remaining.substring(0, endIndex);
                String baseUrl = protocol + cleanDomain;
                
                if (!baseUrl.endsWith("/")) {
                    baseUrl += "/";
                }
                
                return baseUrl;
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        return null;
    }
}